<?xml version="1.0" encoding="UTF-8"?>
<model modelUID="r:e6f19801-1388-44df-81c3-9b5eba7fef84(jsh)">
  <persistence version="3" />
  <refactoringHistory />
  <language namespace="f3061a53-9226-4cc5-a443-f952ceaf5816(jetbrains.mps.baseLanguage)" />
  <language namespace="83888646-71ce-4f1c-9c53-c54016f6ad4f(jetbrains.mps.baseLanguage.collections)" />
  <language namespace="fd392034-7849-419d-9071-12563d152375(jetbrains.mps.baseLanguage.closures)" />
  <languageAspect modelUID="r:00000000-0000-4000-0000-011c895902ca(jetbrains.mps.baseLanguage.structure)" version="3" />
  <languageAspect modelUID="r:00000000-0000-4000-0000-011c895902c1(jetbrains.mps.baseLanguage.constraints)" version="83" />
  <languageAspect modelUID="r:00000000-0000-4000-0000-011c895902db(jetbrains.mps.baseLanguage.blTypes.constraints)" version="0" />
  <languageAspect modelUID="r:00000000-0000-4000-0000-011c89590283(jetbrains.mps.lang.core.constraints)" version="2" />
  <languageAspect modelUID="r:00000000-0000-4000-0000-011c89590288(jetbrains.mps.lang.core.structure)" version="0" />
  <languageAspect modelUID="r:00000000-0000-4000-0000-011c89590328(jetbrains.mps.baseLanguage.collections.constraints)" version="6" />
  <languageAspect modelUID="r:00000000-0000-4000-0000-011c8959032e(jetbrains.mps.baseLanguage.collections.structure)" version="7" />
  <languageAspect modelUID="r:00000000-0000-4000-0000-011c89590334(jetbrains.mps.baseLanguage.closures.constraints)" version="2" />
  <languageAspect modelUID="r:00000000-0000-4000-0000-011c89590338(jetbrains.mps.baseLanguage.closures.structure)" version="3" />
  <maxImportIndex value="4" />
  <import index="1" modelUID="f:java_stub#java.lang(java.lang@java_stub)" version="-1" />
  <import index="2" modelUID="f:java_stub#java.io(java.io@java_stub)" version="-1" />
  <import index="3" modelUID="f:java_stub#java.util(java.util@java_stub)" version="-1" />
  <import index="4" modelUID="f:java_stub#java.util.regex(java.util.regex@java_stub)" version="-1" />
  <node type="jetbrains.mps.baseLanguage.structure.Interface" id="2875089326488171830">
    <property name="name" value="Func" />
    <node role="method" type="jetbrains.mps.baseLanguage.structure.InstanceMethodDeclaration" id="2875089326488171834">
      <property name="isAbstract" value="true" />
      <property name="name" value="f" />
      <node role="returnType" type="jetbrains.mps.baseLanguage.structure.TypeVariableReference" id="2875089326488171838">
        <link role="typeVariableDeclaration" targetNodeId="2875089326488171833" resolveInfo="R" />
      </node>
      <node role="visibility" type="jetbrains.mps.baseLanguage.structure.PublicVisibility" id="2875089326488171836" />
      <node role="body" type="jetbrains.mps.baseLanguage.structure.StatementList" id="2875089326488171837" />
      <node role="parameter" type="jetbrains.mps.baseLanguage.structure.ParameterDeclaration" id="2875089326488171839">
        <property name="name" value="arg" />
        <node role="type" type="jetbrains.mps.baseLanguage.structure.TypeVariableReference" id="2875089326488171840">
          <link role="typeVariableDeclaration" targetNodeId="2875089326488171832" resolveInfo="D" />
        </node>
      </node>
    </node>
    <node role="visibility" type="jetbrains.mps.baseLanguage.structure.PublicVisibility" id="2875089326488171831" />
    <node role="typeVariableDeclaration" type="jetbrains.mps.baseLanguage.structure.TypeVariableDeclaration" id="2875089326488171832">
      <property name="name" value="D" />
    </node>
    <node role="typeVariableDeclaration" type="jetbrains.mps.baseLanguage.structure.TypeVariableDeclaration" id="2875089326488171833">
      <property name="name" value="R" />
    </node>
  </node>
  <node type="jetbrains.mps.baseLanguage.structure.ClassConcept" id="2875089326488848828">
    <property name="name" value="ShellUtil" />
    <node role="visibility" type="jetbrains.mps.baseLanguage.structure.PublicVisibility" id="2875089326488848829" />
    <node role="constructor" type="jetbrains.mps.baseLanguage.structure.ConstructorDeclaration" id="2875089326488848830">
      <node role="returnType" type="jetbrains.mps.baseLanguage.structure.VoidType" id="2875089326488848831" />
      <node role="visibility" type="jetbrains.mps.baseLanguage.structure.PublicVisibility" id="2875089326488848832" />
      <node role="body" type="jetbrains.mps.baseLanguage.structure.StatementList" id="2875089326488848833" />
    </node>
    <node role="staticMethod" type="jetbrains.mps.baseLanguage.structure.StaticMethodDeclaration" id="2875089326488872391">
      <property name="name" value="ls" />
      <property name="isFinal" value="false" />
      <node role="returnType" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="2875089326488848839">
        <link role="classifier" targetNodeId="1.~Iterable" resolveInfo="Iterable" />
        <node role="parameter" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="2875089326488848841">
          <link role="classifier" targetNodeId="2.~File" resolveInfo="File" />
        </node>
      </node>
      <node role="parameter" type="jetbrains.mps.baseLanguage.structure.ParameterDeclaration" id="2875089326488848842">
        <property name="name" value="dir" />
        <node role="type" type="jetbrains.mps.baseLanguage.structure.StringType" id="8037047503614712339" />
      </node>
      <node role="body" type="jetbrains.mps.baseLanguage.structure.StatementList" id="2875089326488848838">
        <node role="statement" type="jetbrains.mps.baseLanguage.structure.LocalVariableDeclarationStatement" id="5768950545889754739">
          <node role="localVariableDeclaration" type="jetbrains.mps.baseLanguage.structure.LocalVariableDeclaration" id="5768950545889754740">
            <property name="name" value="f" />
            <node role="type" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="5768950545889754741">
              <link role="classifier" targetNodeId="2.~File" resolveInfo="File" />
            </node>
            <node role="initializer" type="jetbrains.mps.baseLanguage.structure.GenericNewExpression" id="5768950545889754742">
              <node role="creator" type="jetbrains.mps.baseLanguage.structure.ClassCreator" id="5768950545889754743">
                <link role="baseMethodDeclaration" targetNodeId="2.~File.&lt;init&gt;(java.lang.String)" resolveInfo="File" />
                <node role="actualArgument" type="jetbrains.mps.baseLanguage.structure.ParameterReference" id="5768950545889754744">
                  <link role="variableDeclaration" targetNodeId="2875089326488848842" resolveInfo="dir" />
                </node>
              </node>
            </node>
          </node>
        </node>
        <node role="statement" type="jetbrains.mps.baseLanguage.structure.LocalVariableDeclarationStatement" id="5768950545889754745">
          <node role="localVariableDeclaration" type="jetbrains.mps.baseLanguage.structure.LocalVariableDeclaration" id="5768950545889754746">
            <property name="name" value="children" />
            <node role="type" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="5768950545889754747">
              <link role="classifier" targetNodeId="3.~List" resolveInfo="List" />
              <node role="parameter" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="5768950545889754748">
                <link role="classifier" targetNodeId="2.~File" resolveInfo="File" />
              </node>
            </node>
            <node role="initializer" type="jetbrains.mps.baseLanguage.structure.StaticMethodCall" id="5768950545889754749">
              <link role="classConcept" targetNodeId="3.~Arrays" resolveInfo="Arrays" />
              <link role="baseMethodDeclaration" targetNodeId="3.~Arrays.asList(java.lang.Object...):java.util.List" resolveInfo="asList" />
              <node role="actualArgument" type="jetbrains.mps.baseLanguage.structure.DotExpression" id="5768950545889754750">
                <node role="operand" type="jetbrains.mps.baseLanguage.structure.LocalVariableReference" id="5768950545889754751">
                  <link role="variableDeclaration" targetNodeId="5768950545889754740" resolveInfo="f" />
                </node>
                <node role="operation" type="jetbrains.mps.baseLanguage.structure.InstanceMethodCallOperation" id="5768950545889754752">
                  <link role="baseMethodDeclaration" targetNodeId="2.~File.listFiles():java.io.File[]" resolveInfo="listFiles" />
                </node>
              </node>
            </node>
          </node>
        </node>
        <node role="statement" type="jetbrains.mps.baseLanguage.structure.IfStatement" id="5768950545889754753">
          <node role="ifTrue" type="jetbrains.mps.baseLanguage.structure.StatementList" id="5768950545889754754">
            <node role="statement" type="jetbrains.mps.baseLanguage.structure.ThrowStatement" id="5768950545889754755">
              <node role="throwable" type="jetbrains.mps.baseLanguage.structure.GenericNewExpression" id="5768950545889754756">
                <node role="creator" type="jetbrains.mps.baseLanguage.structure.ClassCreator" id="5768950545889754757">
                  <link role="baseMethodDeclaration" targetNodeId="2.~IOException.&lt;init&gt;(java.lang.String)" resolveInfo="IOException" />
                  <node role="actualArgument" type="jetbrains.mps.baseLanguage.structure.PlusExpression" id="5768950545889754758">
                    <node role="rightExpression" type="jetbrains.mps.baseLanguage.structure.StringLiteral" id="5768950545889754759">
                      <property name="value" value="' is not a directory" />
                    </node>
                    <node role="leftExpression" type="jetbrains.mps.baseLanguage.structure.PlusExpression" id="5768950545889754760">
                      <node role="leftExpression" type="jetbrains.mps.baseLanguage.structure.StringLiteral" id="5768950545889754761">
                        <property name="value" value="'" />
                      </node>
                      <node role="rightExpression" type="jetbrains.mps.baseLanguage.structure.ParameterReference" id="5768950545889754762">
                        <link role="variableDeclaration" targetNodeId="2875089326488848842" resolveInfo="dir" />
                      </node>
                    </node>
                  </node>
                </node>
              </node>
            </node>
          </node>
          <node role="condition" type="jetbrains.mps.baseLanguage.structure.EqualsExpression" id="5768950545889754763">
            <node role="rightExpression" type="jetbrains.mps.baseLanguage.structure.NullLiteral" id="5768950545889754764" />
            <node role="leftExpression" type="jetbrains.mps.baseLanguage.structure.LocalVariableReference" id="5768950545889754765">
              <link role="variableDeclaration" targetNodeId="5768950545889754746" resolveInfo="children" />
            </node>
          </node>
        </node>
        <node role="statement" type="jetbrains.mps.baseLanguage.structure.ReturnStatement" id="5768950545889754766">
          <node role="expression" type="jetbrains.mps.baseLanguage.structure.LocalVariableReference" id="5768950545889754767">
            <link role="variableDeclaration" targetNodeId="5768950545889754746" resolveInfo="children" />
          </node>
        </node>
      </node>
      <node role="visibility" type="jetbrains.mps.baseLanguage.structure.PublicVisibility" id="2875089326488848837" />
      <node role="throwsItem" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="5768950545889754774">
        <link role="classifier" targetNodeId="2.~IOException" resolveInfo="IOException" />
      </node>
    </node>
    <node role="staticMethod" type="jetbrains.mps.baseLanguage.structure.StaticMethodDeclaration" id="3098830523764008868">
      <property name="name" value="grep" />
      <node role="returnType" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="3098830523764008876">
        <link role="classifier" targetNodeId="1.~Iterable" resolveInfo="Iterable" />
        <node role="parameter" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="3098830523764008878">
          <link role="classifier" targetNodeId="2.~File" resolveInfo="File" />
        </node>
      </node>
      <node role="visibility" type="jetbrains.mps.baseLanguage.structure.PublicVisibility" id="3098830523764008870" />
      <node role="body" type="jetbrains.mps.baseLanguage.structure.StatementList" id="3098830523764008871">
        <node role="statement" type="jetbrains.mps.baseLanguage.structure.LocalVariableDeclarationStatement" id="8037047503616302625">
          <node role="localVariableDeclaration" type="jetbrains.mps.baseLanguage.structure.LocalVariableDeclaration" id="8037047503616302626">
            <property name="name" value="pattern" />
            <node role="type" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="8037047503616302627">
              <link role="classifier" targetNodeId="4.~Pattern" resolveInfo="Pattern" />
            </node>
          </node>
        </node>
        <node role="statement" type="jetbrains.mps.baseLanguage.structure.TryCatchStatement" id="8037047503616302634">
          <node role="body" type="jetbrains.mps.baseLanguage.structure.StatementList" id="8037047503616302635">
            <node role="statement" type="jetbrains.mps.baseLanguage.structure.ExpressionStatement" id="8037047503616302631">
              <node role="expression" type="jetbrains.mps.baseLanguage.structure.AssignmentExpression" id="8037047503616302632">
                <node role="rValue" type="jetbrains.mps.baseLanguage.structure.StaticMethodCall" id="8037047503616302628">
                  <link role="baseMethodDeclaration" targetNodeId="4.~Pattern.compile(java.lang.String):java.util.regex.Pattern" resolveInfo="compile" />
                  <link role="classConcept" targetNodeId="4.~Pattern" resolveInfo="Pattern" />
                  <node role="actualArgument" type="jetbrains.mps.baseLanguage.structure.ParameterReference" id="8037047503616302629">
                    <link role="variableDeclaration" targetNodeId="3098830523764011531" resolveInfo="regexp" />
                  </node>
                </node>
                <node role="lValue" type="jetbrains.mps.baseLanguage.structure.LocalVariableReference" id="8037047503616302633">
                  <link role="variableDeclaration" targetNodeId="8037047503616302626" resolveInfo="pattern" />
                </node>
              </node>
            </node>
          </node>
          <node role="catchClause" type="jetbrains.mps.baseLanguage.structure.CatchClause" id="8037047503616302636">
            <node role="throwable" type="jetbrains.mps.baseLanguage.structure.LocalVariableDeclaration" id="8037047503616302637">
              <property name="name" value="ex" />
              <node role="type" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="8037047503616302640">
                <link role="classifier" targetNodeId="4.~PatternSyntaxException" resolveInfo="PatternSyntaxException" />
              </node>
            </node>
            <node role="catchBody" type="jetbrains.mps.baseLanguage.structure.StatementList" id="8037047503616302639">
              <node role="statement" type="jetbrains.mps.baseLanguage.structure.RemarkStatement" id="8037047503616302646">
                <property name="value" value=" we should not throw, just bark and return nothing" />
              </node>
              <node role="statement" type="jetbrains.mps.baseLanguage.structure.ExpressionStatement" id="8037047503616302648">
                <node role="expression" type="jetbrains.mps.baseLanguage.structure.DotExpression" id="8037047503616302649">
                  <node role="operand" type="jetbrains.mps.baseLanguage.structure.StaticFieldReference" id="8037047503616302650">
                    <link role="classifier" targetNodeId="1.~System" />
                    <link role="variableDeclaration" targetNodeId="1.~System.out" />
                  </node>
                  <node role="operation" type="jetbrains.mps.baseLanguage.structure.InstanceMethodCallOperation" id="8037047503616302651">
                    <link role="baseMethodDeclaration" targetNodeId="2.~PrintStream.println(java.lang.String):void" resolveInfo="println" />
                    <node role="actualArgument" type="jetbrains.mps.baseLanguage.structure.PlusExpression" id="8037047503616302656">
                      <node role="rightExpression" type="jetbrains.mps.baseLanguage.structure.LocalVariableReference" id="8037047503616302659">
                        <link role="variableDeclaration" targetNodeId="8037047503616302637" resolveInfo="ex" />
                      </node>
                      <node role="leftExpression" type="jetbrains.mps.baseLanguage.structure.StringLiteral" id="8037047503616302655">
                        <property name="value" value="shell util:" />
                      </node>
                    </node>
                  </node>
                </node>
              </node>
              <node role="statement" type="jetbrains.mps.baseLanguage.structure.ReturnStatement" id="8037047503616302641">
                <node role="expression" type="jetbrains.mps.baseLanguage.structure.StaticFieldReference" id="8037047503616302643">
                  <link role="classifier" targetNodeId="3.~Collections" resolveInfo="Collections" />
                  <link role="variableDeclaration" targetNodeId="3.~Collections.EMPTY_LIST" resolveInfo="EMPTY_LIST" />
                </node>
              </node>
            </node>
          </node>
        </node>
        <node role="statement" type="jetbrains.mps.baseLanguage.structure.LocalVariableDeclarationStatement" id="3098830523764008889">
          <node role="localVariableDeclaration" type="jetbrains.mps.baseLanguage.structure.LocalVariableDeclaration" id="3098830523764008890">
            <property name="name" value="res" />
            <node role="type" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="3098830523764008891">
              <link role="classifier" targetNodeId="3.~List" resolveInfo="List" />
              <node role="parameter" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="3098830523764008893">
                <link role="classifier" targetNodeId="2.~File" resolveInfo="File" />
              </node>
            </node>
            <node role="initializer" type="jetbrains.mps.baseLanguage.structure.GenericNewExpression" id="3098830523764008895">
              <node role="creator" type="jetbrains.mps.baseLanguage.structure.ClassCreator" id="3098830523764011506">
                <link role="baseMethodDeclaration" targetNodeId="3.~ArrayList.&lt;init&gt;()" resolveInfo="ArrayList" />
                <node role="typeParameter" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="3098830523764011508">
                  <link role="classifier" targetNodeId="2.~File" resolveInfo="File" />
                </node>
              </node>
            </node>
          </node>
        </node>
        <node role="statement" type="jetbrains.mps.baseLanguage.structure.ForeachStatement" id="3098830523764011558">
          <node role="body" type="jetbrains.mps.baseLanguage.structure.StatementList" id="3098830523764011559">
            <node role="statement" type="jetbrains.mps.baseLanguage.structure.IfStatement" id="3098830523764011581">
              <node role="ifTrue" type="jetbrains.mps.baseLanguage.structure.StatementList" id="3098830523764011582">
                <node role="statement" type="jetbrains.mps.baseLanguage.structure.ExpressionStatement" id="3098830523764011591">
                  <node role="expression" type="jetbrains.mps.baseLanguage.structure.DotExpression" id="3098830523764011593">
                    <node role="operand" type="jetbrains.mps.baseLanguage.structure.LocalVariableReference" id="3098830523764011592">
                      <link role="variableDeclaration" targetNodeId="3098830523764008890" resolveInfo="res" />
                    </node>
                    <node role="operation" type="jetbrains.mps.baseLanguage.structure.InstanceMethodCallOperation" id="3098830523764011597">
                      <link role="baseMethodDeclaration" targetNodeId="3.~List.add(java.lang.Object):boolean" resolveInfo="add" />
                      <node role="actualArgument" type="jetbrains.mps.baseLanguage.structure.LocalVariableReference" id="3098830523764011598">
                        <link role="variableDeclaration" targetNodeId="3098830523764011562" resolveInfo="f" />
                      </node>
                    </node>
                  </node>
                </node>
              </node>
              <node role="condition" type="jetbrains.mps.baseLanguage.structure.DotExpression" id="8037047503616302840">
                <node role="operand" type="jetbrains.mps.baseLanguage.structure.DotExpression" id="8037047503616302829">
                  <node role="operand" type="jetbrains.mps.baseLanguage.structure.LocalVariableReference" id="8037047503616302828">
                    <link role="variableDeclaration" targetNodeId="8037047503616302626" resolveInfo="pattern" />
                  </node>
                  <node role="operation" type="jetbrains.mps.baseLanguage.structure.InstanceMethodCallOperation" id="8037047503616302833">
                    <link role="baseMethodDeclaration" targetNodeId="4.~Pattern.matcher(java.lang.CharSequence):java.util.regex.Matcher" resolveInfo="matcher" />
                    <node role="actualArgument" type="jetbrains.mps.baseLanguage.structure.DotExpression" id="8037047503616302835">
                      <node role="operand" type="jetbrains.mps.baseLanguage.structure.LocalVariableReference" id="8037047503616302834">
                        <link role="variableDeclaration" targetNodeId="3098830523764011562" resolveInfo="f" />
                      </node>
                      <node role="operation" type="jetbrains.mps.baseLanguage.structure.InstanceMethodCallOperation" id="8037047503616302839">
                        <link role="baseMethodDeclaration" targetNodeId="2.~File.getName():java.lang.String" resolveInfo="getName" />
                      </node>
                    </node>
                  </node>
                </node>
                <node role="operation" type="jetbrains.mps.baseLanguage.structure.InstanceMethodCallOperation" id="8037047503616302844">
                  <link role="baseMethodDeclaration" targetNodeId="4.~Matcher.matches():boolean" resolveInfo="matches" />
                </node>
              </node>
            </node>
          </node>
          <node role="iterable" type="jetbrains.mps.baseLanguage.structure.ParameterReference" id="3098830523764011569">
            <link role="variableDeclaration" targetNodeId="3098830523764008879" resolveInfo="files" />
          </node>
          <node role="variable" type="jetbrains.mps.baseLanguage.structure.LocalVariableDeclaration" id="3098830523764011562">
            <property name="name" value="f" />
            <node role="type" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="3098830523764011566">
              <link role="classifier" targetNodeId="2.~File" resolveInfo="File" />
            </node>
          </node>
        </node>
        <node role="statement" type="jetbrains.mps.baseLanguage.structure.ReturnStatement" id="3098830523764008884">
          <node role="expression" type="jetbrains.mps.baseLanguage.structure.LocalVariableReference" id="3098830523764011509">
            <link role="variableDeclaration" targetNodeId="3098830523764008890" resolveInfo="res" />
          </node>
        </node>
      </node>
      <node role="parameter" type="jetbrains.mps.baseLanguage.structure.ParameterDeclaration" id="3098830523764008879">
        <property name="name" value="files" />
        <node role="type" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="3098830523764008880">
          <link role="classifier" targetNodeId="1.~Iterable" resolveInfo="Iterable" />
          <node role="parameter" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="3098830523764008882">
            <link role="classifier" targetNodeId="2.~File" resolveInfo="File" />
          </node>
        </node>
      </node>
      <node role="parameter" type="jetbrains.mps.baseLanguage.structure.ParameterDeclaration" id="3098830523764011531">
        <property name="name" value="regexp" />
        <node role="type" type="jetbrains.mps.baseLanguage.structure.StringType" id="8037047503614712338" />
      </node>
    </node>
    <node role="staticMethod" type="jetbrains.mps.baseLanguage.structure.StaticMethodDeclaration" id="7747186999601878011">
      <property name="name" value="pipe" />
      <node role="visibility" type="jetbrains.mps.baseLanguage.structure.PublicVisibility" id="7747186999601878013" />
      <node role="body" type="jetbrains.mps.baseLanguage.structure.StatementList" id="7747186999601878014">
        <node role="statement" type="jetbrains.mps.baseLanguage.structure.ReturnStatement" id="7747186999601878033">
          <node role="expression" type="jetbrains.mps.baseLanguage.structure.DotExpression" id="7747186999601878036">
            <node role="operand" type="jetbrains.mps.baseLanguage.structure.ParameterReference" id="7747186999601878035">
              <link role="variableDeclaration" targetNodeId="7747186999601878023" resolveInfo="f" />
            </node>
            <node role="operation" type="jetbrains.mps.baseLanguage.structure.InstanceMethodCallOperation" id="7747186999601878040">
              <link role="baseMethodDeclaration" targetNodeId="2875089326488171834" resolveInfo="f" />
              <node role="actualArgument" type="jetbrains.mps.baseLanguage.structure.ParameterReference" id="7747186999601878045">
                <link role="variableDeclaration" targetNodeId="7747186999601878021" resolveInfo="value" />
              </node>
            </node>
          </node>
        </node>
      </node>
      <node role="typeVariableDeclaration" type="jetbrains.mps.baseLanguage.structure.TypeVariableDeclaration" id="7747186999601878015">
        <property name="name" value="D" />
      </node>
      <node role="typeVariableDeclaration" type="jetbrains.mps.baseLanguage.structure.TypeVariableDeclaration" id="7747186999601878016">
        <property name="name" value="R" />
      </node>
      <node role="parameter" type="jetbrains.mps.baseLanguage.structure.ParameterDeclaration" id="7747186999601878021">
        <property name="name" value="value" />
        <node role="type" type="jetbrains.mps.baseLanguage.structure.TypeVariableReference" id="7747186999601878169">
          <link role="typeVariableDeclaration" targetNodeId="7747186999601878015" resolveInfo="D" />
        </node>
      </node>
      <node role="parameter" type="jetbrains.mps.baseLanguage.structure.ParameterDeclaration" id="7747186999601878023">
        <property name="name" value="f" />
        <node role="type" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="7747186999601878025">
          <link role="classifier" targetNodeId="2875089326488171830" resolveInfo="Func" />
          <node role="parameter" type="jetbrains.mps.baseLanguage.structure.TypeVariableReference" id="7747186999601878164">
            <link role="typeVariableDeclaration" targetNodeId="7747186999601878015" resolveInfo="D" />
          </node>
          <node role="parameter" type="jetbrains.mps.baseLanguage.structure.TypeVariableReference" id="7747186999601878029">
            <link role="typeVariableDeclaration" targetNodeId="7747186999601878016" resolveInfo="R" />
          </node>
        </node>
      </node>
      <node role="returnType" type="jetbrains.mps.baseLanguage.structure.TypeVariableReference" id="7747186999601878174">
        <link role="typeVariableDeclaration" targetNodeId="7747186999601878016" resolveInfo="R" />
      </node>
    </node>
    <node role="staticMethod" type="jetbrains.mps.baseLanguage.structure.StaticMethodDeclaration" id="8037047503614709407">
      <property name="name" value="direct" />
      <node role="returnType" type="jetbrains.mps.baseLanguage.structure.VoidType" id="8037047503614709408" />
      <node role="visibility" type="jetbrains.mps.baseLanguage.structure.PublicVisibility" id="8037047503614709409" />
      <node role="body" type="jetbrains.mps.baseLanguage.structure.StatementList" id="8037047503614709410">
        <node role="statement" type="jetbrains.mps.baseLanguage.structure.LocalVariableDeclarationStatement" id="8037047503614725634">
          <node role="localVariableDeclaration" type="jetbrains.mps.baseLanguage.structure.LocalVariableDeclaration" id="8037047503614725635">
            <property name="name" value="fileNames" />
            <node role="type" type="jetbrains.mps.baseLanguage.structure.StringType" id="8037047503614725636" />
            <node role="initializer" type="jetbrains.mps.baseLanguage.structure.LocalStaticMethodCall" id="8037047503614732843">
              <link role="baseMethodDeclaration" targetNodeId="8037047503614725641" resolveInfo="getFileNamesList" />
              <node role="actualArgument" type="jetbrains.mps.baseLanguage.structure.ParameterReference" id="8037047503614732845">
                <link role="variableDeclaration" targetNodeId="8037047503614709411" resolveInfo="files" />
              </node>
            </node>
          </node>
        </node>
        <node role="statement" type="jetbrains.mps.baseLanguage.structure.LocalVariableDeclarationStatement" id="8037047503614712355">
          <node role="localVariableDeclaration" type="jetbrains.mps.baseLanguage.structure.LocalVariableDeclaration" id="8037047503614712356">
            <property name="name" value="fos" />
            <node role="type" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="8037047503614725452">
              <link role="classifier" targetNodeId="2.~FileOutputStream" resolveInfo="FileOutputStream" />
            </node>
            <node role="initializer" type="jetbrains.mps.baseLanguage.structure.GenericNewExpression" id="8037047503614712358">
              <node role="creator" type="jetbrains.mps.baseLanguage.structure.ClassCreator" id="8037047503614712359">
                <link role="baseMethodDeclaration" targetNodeId="2.~FileOutputStream.&lt;init&gt;(java.lang.String)" resolveInfo="FileOutputStream" />
                <node role="actualArgument" type="jetbrains.mps.baseLanguage.structure.ParameterReference" id="8037047503614712360">
                  <link role="variableDeclaration" targetNodeId="8037047503614709415" resolveInfo="filePath" />
                </node>
              </node>
            </node>
          </node>
        </node>
        <node role="statement" type="jetbrains.mps.baseLanguage.structure.TryStatement" id="8037047503614725435">
          <node role="body" type="jetbrains.mps.baseLanguage.structure.StatementList" id="8037047503614725436">
            <node role="statement" type="jetbrains.mps.baseLanguage.structure.ExpressionStatement" id="8037047503614725446">
              <node role="expression" type="jetbrains.mps.baseLanguage.structure.DotExpression" id="8037047503614732857">
                <node role="operand" type="jetbrains.mps.baseLanguage.structure.LocalVariableReference" id="8037047503614732856">
                  <link role="variableDeclaration" targetNodeId="8037047503614712356" resolveInfo="fos" />
                </node>
                <node role="operation" type="jetbrains.mps.baseLanguage.structure.InstanceMethodCallOperation" id="8037047503614732861">
                  <link role="baseMethodDeclaration" targetNodeId="2.~FileOutputStream.write(byte[]):void" resolveInfo="write" />
                  <node role="actualArgument" type="jetbrains.mps.baseLanguage.structure.DotExpression" id="8037047503614732863">
                    <node role="operand" type="jetbrains.mps.baseLanguage.structure.LocalVariableReference" id="8037047503614732862">
                      <link role="variableDeclaration" targetNodeId="8037047503614725635" resolveInfo="fileNames" />
                    </node>
                    <node role="operation" type="jetbrains.mps.baseLanguage.structure.InstanceMethodCallOperation" id="8037047503614732867">
                      <link role="baseMethodDeclaration" targetNodeId="1.~String.getBytes():byte[]" resolveInfo="getBytes" />
                    </node>
                  </node>
                </node>
              </node>
            </node>
          </node>
          <node role="finallyBody" type="jetbrains.mps.baseLanguage.structure.StatementList" id="8037047503614725438">
            <node role="statement" type="jetbrains.mps.baseLanguage.structure.TryCatchStatement" id="8037047503614732877">
              <node role="body" type="jetbrains.mps.baseLanguage.structure.StatementList" id="8037047503614732878">
                <node role="statement" type="jetbrains.mps.baseLanguage.structure.ExpressionStatement" id="8037047503614732869">
                  <node role="expression" type="jetbrains.mps.baseLanguage.structure.DotExpression" id="8037047503614732871">
                    <node role="operand" type="jetbrains.mps.baseLanguage.structure.LocalVariableReference" id="8037047503614732870">
                      <link role="variableDeclaration" targetNodeId="8037047503614712356" resolveInfo="fos" />
                    </node>
                    <node role="operation" type="jetbrains.mps.baseLanguage.structure.InstanceMethodCallOperation" id="8037047503614732875">
                      <link role="baseMethodDeclaration" targetNodeId="2.~FileOutputStream.close():void" resolveInfo="close" />
                    </node>
                  </node>
                </node>
              </node>
              <node role="catchClause" type="jetbrains.mps.baseLanguage.structure.CatchClause" id="8037047503614732879">
                <node role="throwable" type="jetbrains.mps.baseLanguage.structure.LocalVariableDeclaration" id="8037047503614732880">
                  <property name="name" value="ignored" />
                  <node role="type" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="8037047503614732883">
                    <link role="classifier" targetNodeId="2.~IOException" resolveInfo="IOException" />
                  </node>
                </node>
                <node role="catchBody" type="jetbrains.mps.baseLanguage.structure.StatementList" id="8037047503614732882" />
              </node>
            </node>
          </node>
        </node>
      </node>
      <node role="parameter" type="jetbrains.mps.baseLanguage.structure.ParameterDeclaration" id="8037047503614709411">
        <property name="name" value="files" />
        <node role="type" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="8037047503614709412">
          <link role="classifier" targetNodeId="1.~Iterable" resolveInfo="Iterable" />
          <node role="parameter" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="8037047503614709414">
            <link role="classifier" targetNodeId="2.~File" resolveInfo="File" />
          </node>
        </node>
      </node>
      <node role="parameter" type="jetbrains.mps.baseLanguage.structure.ParameterDeclaration" id="8037047503614709415">
        <property name="name" value="filePath" />
        <node role="type" type="jetbrains.mps.baseLanguage.structure.StringType" id="8037047503614712337" />
      </node>
      <node role="throwsItem" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="8037047503614712221">
        <link role="classifier" targetNodeId="2.~IOException" resolveInfo="IOException" />
      </node>
    </node>
    <node role="staticMethod" type="jetbrains.mps.baseLanguage.structure.StaticMethodDeclaration" id="8037047503614725641">
      <property name="name" value="getFileNamesList" />
      <node role="returnType" type="jetbrains.mps.baseLanguage.structure.StringType" id="8037047503614732846" />
      <node role="visibility" type="jetbrains.mps.baseLanguage.structure.PrivateVisibility" id="8037047503614725645" />
      <node role="body" type="jetbrains.mps.baseLanguage.structure.StatementList" id="8037047503614725644">
        <node role="statement" type="jetbrains.mps.baseLanguage.structure.LocalVariableDeclarationStatement" id="8037047503614725650">
          <node role="localVariableDeclaration" type="jetbrains.mps.baseLanguage.structure.LocalVariableDeclaration" id="8037047503614725651">
            <property name="name" value="sb" />
            <node role="type" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="8037047503614725652">
              <link role="classifier" targetNodeId="1.~StringBuilder" resolveInfo="StringBuilder" />
            </node>
            <node role="initializer" type="jetbrains.mps.baseLanguage.structure.GenericNewExpression" id="8037047503614725654">
              <node role="creator" type="jetbrains.mps.baseLanguage.structure.ClassCreator" id="8037047503614732807">
                <link role="baseMethodDeclaration" targetNodeId="1.~StringBuilder.&lt;init&gt;()" resolveInfo="StringBuilder" />
              </node>
            </node>
          </node>
        </node>
        <node role="statement" type="jetbrains.mps.baseLanguage.structure.ForeachStatement" id="8037047503614732809">
          <node role="body" type="jetbrains.mps.baseLanguage.structure.StatementList" id="8037047503614732810">
            <node role="statement" type="jetbrains.mps.baseLanguage.structure.ExpressionStatement" id="8037047503614732824">
              <node role="expression" type="jetbrains.mps.baseLanguage.structure.DotExpression" id="8037047503614732837">
                <node role="operand" type="jetbrains.mps.baseLanguage.structure.DotExpression" id="8037047503614732826">
                  <node role="operand" type="jetbrains.mps.baseLanguage.structure.LocalVariableReference" id="8037047503614732825">
                    <link role="variableDeclaration" targetNodeId="8037047503614725651" resolveInfo="sb" />
                  </node>
                  <node role="operation" type="jetbrains.mps.baseLanguage.structure.InstanceMethodCallOperation" id="8037047503614732830">
                    <link role="baseMethodDeclaration" targetNodeId="1.~StringBuilder.append(java.lang.String):java.lang.StringBuilder" resolveInfo="append" />
                    <node role="actualArgument" type="jetbrains.mps.baseLanguage.structure.DotExpression" id="8037047503614732832">
                      <node role="operand" type="jetbrains.mps.baseLanguage.structure.LocalVariableReference" id="8037047503614732831">
                        <link role="variableDeclaration" targetNodeId="8037047503614732813" resolveInfo="f" />
                      </node>
                      <node role="operation" type="jetbrains.mps.baseLanguage.structure.InstanceMethodCallOperation" id="8037047503614732836">
                        <link role="baseMethodDeclaration" targetNodeId="2.~File.getName():java.lang.String" resolveInfo="getName" />
                      </node>
                    </node>
                  </node>
                </node>
                <node role="operation" type="jetbrains.mps.baseLanguage.structure.InstanceMethodCallOperation" id="8037047503614732841">
                  <link role="baseMethodDeclaration" targetNodeId="1.~StringBuilder.append(java.lang.String):java.lang.StringBuilder" resolveInfo="append" />
                  <node role="actualArgument" type="jetbrains.mps.baseLanguage.structure.StringLiteral" id="8037047503614732842">
                    <property name="value" value="\n" />
                  </node>
                </node>
              </node>
            </node>
          </node>
          <node role="iterable" type="jetbrains.mps.baseLanguage.structure.ParameterReference" id="8037047503614732820">
            <link role="variableDeclaration" targetNodeId="8037047503614725646" resolveInfo="files" />
          </node>
          <node role="variable" type="jetbrains.mps.baseLanguage.structure.LocalVariableDeclaration" id="8037047503614732813">
            <property name="name" value="f" />
            <node role="type" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="8037047503614732817">
              <link role="classifier" targetNodeId="2.~File" resolveInfo="File" />
            </node>
          </node>
        </node>
        <node role="statement" type="jetbrains.mps.baseLanguage.structure.ReturnStatement" id="8037047503614732848">
          <node role="expression" type="jetbrains.mps.baseLanguage.structure.DotExpression" id="8037047503614732851">
            <node role="operand" type="jetbrains.mps.baseLanguage.structure.LocalVariableReference" id="8037047503614732850">
              <link role="variableDeclaration" targetNodeId="8037047503614725651" resolveInfo="sb" />
            </node>
            <node role="operation" type="jetbrains.mps.baseLanguage.structure.InstanceMethodCallOperation" id="8037047503614732855">
              <link role="baseMethodDeclaration" targetNodeId="1.~StringBuilder.toString():java.lang.String" resolveInfo="toString" />
            </node>
          </node>
        </node>
      </node>
      <node role="parameter" type="jetbrains.mps.baseLanguage.structure.ParameterDeclaration" id="8037047503614725646">
        <property name="name" value="files" />
        <node role="type" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="8037047503614725647">
          <link role="classifier" targetNodeId="1.~Iterable" resolveInfo="Iterable" />
          <node role="parameter" type="jetbrains.mps.baseLanguage.structure.ClassifierType" id="8037047503614725649">
            <link role="classifier" targetNodeId="2.~File" resolveInfo="File" />
          </node>
        </node>
      </node>
    </node>
  </node>
</model>

